package real.evaluation;

import real.lang.RealLangException;
import real.lang.RealObject;
/**
 * 
 * Evaluable Interface should be implemented by any FooConstruction structure, that could be evaluated
 * by evaluator. Such evaluable construction structure is instantiate while syntax processing.  
 * Right after syntax analysis and raw syntax instances construction we do symbolic computation 
 * by evaluator.
 * 
 * Such approach leave 
 * 
 * @author ewger
 *
 * @param <T> real.lang.* type returned as a result of evaluation. For example, RealSetConstruction returns RealSet. 
 */
public interface Evaluable<T extends RealObject> {
	/**
	 * This method is called by Evaluator in a manner of a Visitor pattern.
	 * @param eval
	 * @return	 * 
	 * @throws RealLangException 
	 */	
	public T Evaluate(Evaluator eval) throws RealLangException;
	
}
